<template>
  <div class="home">
    <el-tree
      :data="data"
      node-key="id"
      default-expand-all
      @node-drag-start="handleDragStart"
      @node-drag-enter="handleDragEnter"
      @node-drag-leave="handleDragLeave"
      @node-drag-over="handleDragOver"
      @node-drag-end="handleDragEnd"
      @node-drop="handleDrop"
      draggable
      :allow-drop="allowDrop"
      :allow-drag="allowDrag"
      @node-click="handlerClick"
    >
      <span class="custom-tree-node" slot-scope="{ node, data }">
        <span v-if="data.active">{{ node.label }}</span>
        <span v-else>
          <el-input
            v-model="data.label"
            placeholder="请输入内容"
          ></el-input
        ></span>
        <span>
          <el-button type="text" size="mini" @click="() => append(data)">
            增加
          </el-button>
          <el-button type="text" size="mini" @click="() => remove(node, data)">
            删除
          </el-button>
          <el-button v-if="data.active" type="text" size="mini" @click="copyreader(data)">
            编辑
          </el-button>
          <el-button v-else type="text" size="mini" @click="copyreader(data)">
            确认
          </el-button>
        </span>
      </span>
    </el-tree>
  </div>
</template>

<script>
let id = 1000;
let indexid = null;
export default {
  name: 'Home',
  components: {},
  data() {
    return {
      activeid:true,
      indexId: null,
      data: [
        {
          id: 1,
          label: '一级 1',
          active:true,
          children: [
            {
              id: 4,
              label: '二级 1-1',
              active:true,
              children: [
                {
                  id: 9,
                  label: '三级 1-1-1',
                  active:true,
                },
                {
                  id: 10,
                  label: '三级 1-1-2',
                  active:true,
                },
              ],
            },
          ],
        },
        {
          id: 2,
          label: '一级 2',
          active:true,
          children: [
            {
              id: 5,
              label: '二级 2-1',
              active:true,
            },
            {
              id: 6,
              label: '二级 2-2',
              active:true,
            },
          ],
        },
        {
          id: 3,
          label: '一级 3',
          active:true,
          children: [
            {
              id: 7,
              label: '二级 3-1',
              active:true,
            },
            {
              id: 8,
              label: '二级 3-2',
              active:true,
              children: [
                {
                  id: 11,
                  label: '三级 3-2-1',
                  active:true,
                },
                {
                  id: 12,
                  label: '三级 3-2-2',
                  active:true,
                },
                {
                  id: 13,
                  label: '三级 3-2-3',
                  active:true,
                },
              ],
            },
          ],
        },
      ],
      defaultProps: {
        children: 'children',
        label: 'label',
      },
    };
  },
  methods: {
    handleDragStart(node, ev) {
      console.log('drag start', node);
    },
    handleDragEnter(draggingNode, dropNode, ev) {
      console.log('tree drag enter: ', dropNode.label);
    },
    handleDragLeave(draggingNode, dropNode, ev) {
      console.log('tree drag leave: ', dropNode.label);
    },
    handleDragOver(draggingNode, dropNode, ev) {
      console.log('tree drag over: ', dropNode.label);
    },
    handleDragEnd(draggingNode, dropNode, dropType, ev) {
      console.log('tree drag end: ', dropNode && dropNode.label, dropType);
    },
    handleDrop(draggingNode, dropNode, dropType, ev) {
      console.log('tree drop: ', dropNode.label, dropType);
    },
    allowDrop(draggingNode, dropNode, type) {
      if (dropNode.data.label === '二级 3-1') {
        return type !== 'inner';
      } else {
        return true;
      }
    },
    allowDrag(draggingNode) {
      return draggingNode.data.label.indexOf('三级 3-2-2') === -1;
    },
    append(data) {
      console.log(data);
      const newChild = { id: id++, label: 'testtest',active:true, children: [] };
      console.log(newChild);
      if (!data.children) {
        this.$set(data, 'children', []);
      }
      data.children.push(newChild);
    },

    remove(node, data) {
      console.log(data);
      const parent = node.parent;
      const children = parent.data.children || parent.data;
      for (let index = 0; index < children.length; index++) {
        const element = children[index];
        if (element.id === data.id) {
          indexid = index;
          console.log(index);
        }
      }
      // const index = children.findIndex((d) => d.id === data.id);
      children.splice(indexid, 1);
    },

    copyreader(data) {
      console.log(data);
      data.active = !data.active
    },
    handlerClick(data) {
      console.log(data);
    }
  },
};
</script>
<style scoped>
.custom-tree-node {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 14px;
  padding-right: 8px;
}
</style>
